package com.ticket.sass.admin.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ticket.sass.common.entity.tenant.CommoditySkuAttrValueEntity;
import com.ticket.sass.admin.mapper.CommoditySkuAttrValueMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;import com.ticket.sass.admin.service.BaseService;

/**
 * <p>
 * SKU属性值 服务实现类
 * </p>
 *
 * @author ywb
 * @since 2024-03-06
 */
@Service
public class CommoditySkuAttrValueServiceImpl extends ServiceImpl<CommoditySkuAttrValueMapper, CommoditySkuAttrValueEntity> implements BaseService<CommoditySkuAttrValueEntity> {
    
    public boolean isValueExistForAttribute(Long attributeId, String valueName) {
        QueryWrapper<CommoditySkuAttrValueEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("attr_id", attributeId);
        queryWrapper.eq("name", valueName);
        return baseMapper.selectCount(queryWrapper) > 0;
    }
    
    /**
     * 根据属性ID和属性值查询商品SKU属性值的ID，如果属性值不存在则创建并返回ID
     * @param attrId 属性ID
     * @param attrValue 属性值
     * @param commodityId 商品ID
     * @param cinemaId 影院ID
     * @return 商品SKU属性值的ID
     */
    public Long getOrCreateAttrValueId(Long attrId, String attrValue, Long commodityId, Long cinemaId) {
        // 查询属性值是否已存在
        CommoditySkuAttrValueEntity existingAttrValue = lambdaQuery()
            .eq(CommoditySkuAttrValueEntity::getAttrId, attrId)
            .eq(CommoditySkuAttrValueEntity::getName, attrValue)
            .eq(CommoditySkuAttrValueEntity::getCommodityId, commodityId)
            .eq(CommoditySkuAttrValueEntity::getCinemaId, cinemaId)
            .one();
        
        // 如果属性值已存在，则直接返回ID
        if (existingAttrValue != null) {
            return existingAttrValue.getId();
        }
        
        // 如果属性值不存在，则创建属性值并返回ID
        CommoditySkuAttrValueEntity newAttrValue = new CommoditySkuAttrValueEntity(attrId, attrValue, commodityId, cinemaId);
        save(newAttrValue);
        return newAttrValue.getId();
    }
}
